1 Wstęp

Celem projektu jest analiza bazy danych Lego na przestrzeni lat.

2 Przygotowanie środowiska

2.1 Wykorzystane biblioteki

  • knitr - tworzenie raportów w R
  • dplyr - przetwarzanie danych
  • DT - wyświetlanie interaktywnych tabel
  • png - wczytywanie i pokazywanie zdjęć
  • skimr - tworzenie podsumowania danych
  • ggplot2 - tworzenie wykresów
  • plotly - tworzenie interaktywnych wykresów
  • caret - uczenie maszynowe

2.2 Ustawienie powtarzalność wyników

W celu zapewnienia powtarzalności wyników ziarno zostało ustawione na 23.

set.seed(23)

3 Schemat danych

rebrickable_schema <- readPNG("data/rebrickable_schema_v3.png")
grid::grid.raster(rebrickable_schema)

4 Wstępne przetwarzanie danych

4.1 Wczytanie danych

colors_raw <- read.csv("data/colors.csv", header = T, sep = ",")
elements_raw <- read.csv("data/elements.csv", header = T, sep = ",")
inventories_raw <- read.csv("data/inventories.csv", header = T, sep = ",")
inventory_minifigs_raw <- read.csv("data/inventory_minifigs.csv", header = T, sep = ",")
inventory_parts_raw <- read.csv("data/inventory_parts.csv", header = T, sep = ",")
inventory_sets_raw <- read.csv("data/inventory_sets.csv", header = T, sep = ",")
minifigs_raw <- read.csv("data/minifigs.csv", header = T, sep = ",")
part_categories_raw <- read.csv("data/part_categories.csv", header = T, sep = ",")
part_relationships_raw <- read.csv("data/part_relationships.csv", header = T, sep = ",")
parts_raw <- read.csv("data/parts.csv", header = T, sep = ",")
sets_raw <- read.csv("data/sets.csv", header = T, sep = ",")
themes_raw <- read.csv("data/themes.csv", header = T, sep = ",")

4.2 Przetwarzanie brakujących danych

4.2.1 Colors

Brak modyfikacji surowych danych

colors_clean <- colors_raw

4.2.2 Elements

Usunięcie nadmiarowej kolumny design_id, która nie miała wykorzystania w schemacie

elements_clean <- elements_raw[, -4]

4.2.3 Inventories

Brak modyfikacji surowych danych

inventories_clean <- inventories_raw

4.2.4 Inventory Minifigs

Brak modyfikacji surowych danych

inventory_minifigs_clean <- inventory_minifigs_raw

4.2.5 Inventory Parts

Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie

inventory_parts_clean <- inventory_parts_raw[, -6]

4.2.6 Inventory Sets

Brak modyfikacji surowych danych

inventory_sets_clean <- inventory_sets_raw

4.2.7 Minifigs

Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie

minifigs_clean <- minifigs_raw[, -4]

4.2.8 Part Categories

Brak modyfikacji surowych danych

part_categories_clean <- part_categories_raw

4.2.9 Part Relationships

Brak modyfikacji surowych danych

part_relationships_clean <- part_relationships_raw

4.2.10 Parts

Brak modyfikacji surowych danych

parts_clean <- parts_raw

4.2.11 Sets

Usunięcie nadmiarowej kolumny img_url, która nie podlega analizie

sets_clean <- sets_raw[, -6]

4.2.12 Themes

Brak modyfikacji surowych danych

themes_clean <- themes_raw

4.3 Podstawowe statystyki

4.3.1 Colors

knitr::kable((head(colors_clean)))
id name rgb is_trans
-1 [Unknown] 0033B2 f
0 Black 05131D f
1 Blue 0055BF f
2 Green 237841 f
3 Dark Turquoise 008F9B f
4 Red C91A09 f
skim(colors_clean)
Data summary
Name colors_clean
Number of rows 263
Number of columns 4
_______________________
Column type frequency:
character 3
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
name 0 1 3 28 0 263 0
rgb 0 1 6 6 0 223 0
is_trans 0 1 1 1 0 2 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1 651.38 750.55 -1 83 1005 1070.5 9999 ▇▁▁▁▁

4.3.2 Elements

knitr::kable((head(elements_clean)))
element_id part_num color_id
6443403 2277c01pr0009 1
6300211 67906c01 14
4566309 2564 0
4275423 53657 1004
6194308 92926 71
6229123 26561 4
skim(elements_clean)
Data summary
Name elements_clean
Number of rows 84138
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
part_num 0 1 2 19 0 33765 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
element_id 0 1 5222065.12 1596842.63 9327 4259774 6057754 6262025 61532443 ▇▁▁▁▁
color_id 0 1 539.67 2044.86 -1 8 28 135 9999 ▇▁▁▁▁

4.3.3 Inventories

knitr::kable((head(inventories_clean)))
id version set_num
1 1 7922-1
3 1 3931-1
4 1 6942-1
15 1 5158-1
16 1 903-1
17 1 850950-1
skim(inventories_clean)
Data summary
Name inventories_clean
Number of rows 37265
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
set_num 0 1 3 20 0 35644 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1 61103.60 51380.10 1 14424 54379 88842 194312 ▇▆▂▂▂
version 0 1 1.09 0.58 1 1 1 1 16 ▇▁▁▁▁

4.3.4 Inventory Minifigs

knitr::kable((head(inventory_minifigs_clean)))
inventory_id fig_num quantity
3 fig-001549 1
4 fig-000764 1
19 fig-000555 1
25 fig-000574 1
26 fig-000842 1
26 fig-008641 1
skim(inventory_minifigs_clean)
Data summary
Name inventory_minifigs_clean
Number of rows 20858
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
fig_num 0 1 10 10 0 13455 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
inventory_id 0 1 43010.44 52256.78 3 7869 15681 66834 194312 ▇▁▁▁▁
quantity 0 1 1.06 0.78 1 1 1 1 100 ▇▁▁▁▁

4.3.5 Inventory Parts

knitr::kable((head(inventory_parts_clean)))
inventory_id part_num color_id quantity is_spare
1 48379c01 72 1 f
1 48395 7 1 f
1 stickerupn0077 9999 1 f
1 upn0342 0 1 f
1 upn0350 25 1 f
3 2343 47 1 f
skim(inventory_parts_clean)
Data summary
Name inventory_parts_clean
Number of rows 1180987
Number of columns 5
_______________________
Column type frequency:
character 2
numeric 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
part_num 0 1 1 20 0 51051 0
is_spare 0 1 1 1 0 2 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
inventory_id 0 1 50849.46 55136.94 1 9404 22838 87088 194312 ▇▂▁▂▁
color_id 0 1 131.78 862.38 -1 4 15 71 9999 ▇▁▁▁▁
quantity 0 1 3.37 9.95 1 1 2 4 3064 ▇▁▁▁▁

4.3.6 Inventory Sets

knitr::kable((head(inventory_sets_clean)))
inventory_id set_num quantity
35 75911-1 1
35 75912-1 1
39 75048-1 1
39 75053-1 1
50 4515-1 1
50 4520-1 2
skim(inventory_sets_clean)
Data summary
Name inventory_sets_clean
Number of rows 4358
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
set_num 0 1 5 20 0 3171 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
inventory_id 0 1 52518.95 59063.13 35 8076 16423 98685 191576 ▇▁▁▂▁
quantity 0 1 1.81 5.67 1 1 1 1 60 ▇▁▁▁▁

4.3.7 Minifigs

knitr::kable((head(minifigs_clean)))
fig_num name num_parts
fig-000001 Toy Store Employee 4
fig-000002 Customer Kid 4
fig-000003 Assassin Droid, White 8
fig-000004 Man, White Torso, Black Legs, Brown Hair 4
fig-000005 Captain America with Short Legs 3
fig-000006 Lloyd Avatar 5
skim(minifigs_clean)
Data summary
Name minifigs_clean
Number of rows 13764
Number of columns 3
_______________________
Column type frequency:
character 2
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
fig_num 0 1 10 10 0 13764 0
name 0 1 1 148 0 13354 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
num_parts 0 1 5.3 6.03 0 4 4 5 156 ▇▁▁▁▁

4.3.8 Part Categories

knitr::kable((head(part_categories_clean)))
id name
1 Baseplates
3 Bricks Sloped
4 Duplo, Quatro and Primo
5 Bricks Special
6 Bricks Wedged
7 Containers
skim(part_categories_clean)
Data summary
Name part_categories_clean
Number of rows 66
Number of columns 2
_______________________
Column type frequency:
character 1
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
name 0 1 4 44 0 66 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1 35.36 19.41 1 19.25 35.5 51.75 68 ▇▇▇▇▇

4.3.9 Part Relationships

knitr::kable((head(part_relationships_clean)))
rel_type child_part_num parent_part_num
P 3626cpr3662 3626c
P 87079pr9974 87079
P 3960pr9971 3960
R 98653pr0003 98086pr0003
R 98653pr0003 98088pat0003
R 98653pr0003 98089pat0003
skim(part_relationships_clean)
Data summary
Name part_relationships_clean
Number of rows 29977
Number of columns 3
_______________________
Column type frequency:
character 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
rel_type 0 1 1 1 0 6 0
child_part_num 0 1 1 20 0 27139 0
parent_part_num 0 1 1 19 0 4725 0

4.3.10 Parts

knitr::kable((head(parts_clean)))
part_num name part_cat_id part_material
003381 Sticker Sheet for Set 663-1 58 Plastic
003383 Sticker Sheet for Sets 618-1, 628-2 58 Plastic
003402 Sticker Sheet for Sets 310-3, 311-1, 312-3 58 Plastic
003429 Sticker Sheet for Set 1550-1 58 Plastic
003432 Sticker Sheet for Sets 357-1, 355-1, 940-1 58 Plastic
003434 Sticker Sheet for Set 575-2, 653-1, 460-1 58 Plastic
skim(parts_clean)
Data summary
Name parts_clean
Number of rows 52615
Number of columns 4
_______________________
Column type frequency:
character 3
numeric 1
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
part_num 0 1 1 20 0 52615 0
name 0 1 3 222 0 52103 0
part_material 0 1 4 16 0 7 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
part_cat_id 0 1 38.91 22.08 1 17 41 60 68 ▃▃▂▁▇

4.3.11 Sets

knitr::kable((head(sets_clean)))
set_num name year theme_id num_parts
001-1 Gears 1965 1 43
0011-2 Town Mini-Figures 1979 67 12
0011-3 Castle 2 for 1 Bonus Offer 1987 199 0
0012-1 Space Mini-Figures 1979 143 12
0013-1 Space Mini-Figures 1979 143 12
0014-1 Space Mini-Figures 1979 143 2
skim(sets_clean)
Data summary
Name sets_clean
Number of rows 21880
Number of columns 5
_______________________
Column type frequency:
character 2
numeric 3
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
set_num 0 1 3 20 0 21880 0
name 0 1 2 93 0 18752 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
year 0 1 2007.76 13.96 1949 2001 2012 2018 2024 ▁▁▁▃▇
theme_id 0 1 441.97 215.53 1 273 497 608 752 ▃▃▃▇▇
num_parts 0 1 161.38 418.14 0 3 31 139 11695 ▇▁▁▁▁

4.3.12 Themes

knitr::kable((head(themes_clean)))
id name parent_id
1 Technic NA
3 Competition 1
4 Expert Builder 1
16 RoboRiders 1
17 Speed Slammers 1
18 Star Wars 1
skim(themes_clean)
Data summary
Name themes_clean
Number of rows 468
Number of columns 3
_______________________
Column type frequency:
character 1
numeric 2
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
name 0 1 2 42 0 385 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
id 0 1.00 433.46 216.55 1 250.5 466 625.25 752 ▅▅▅▆▇
parent_id 145 0.69 360.64 197.19 1 186.0 411 512.50 697 ▅▃▂▇▂

5 Analiza danych

5.1 Analiza wykorzystanych kolorów w elementach

Poniższy wykres ukazuje 15 najczęściej używanych kolorów w elementach. Warte również uwagi jest fakt, iż za brak koloru uważa się kolor czarny.

5.2 Analiza najczęściej używanych minifigach w zestawach

Poniższe wykresy ukazuje 10 najczęściej używanych minifigów w zestawach. Pierwszy wykres agreguje dane po nazwach, natomiast drugi po unikalnych indeksach. Analizując uzyskane wyniki możemy dostrzeć, że wyniki różnią się. Wynika to z faktu, iż istnieją minifigi posiadające taką samą nazwę, ale różniącą się indeksem. Takie minifigi różnią się najczęściej barwą kolorów, ilością zastosowanych elementów lub materiałem z których zostały wykonane.

5.3 Liczba części z i bez elementów

Wykres przestawia porównanie liczbę części zawierającej element z tymi, które są bez elementów

5.4 Liczba elementów z i bez kolorów

Wykres przestawia porównanie liczbę elementów zawierającej jakiś kolor z tymi, które są bez koloru

5.5 Lista używanych materiałów do tworzenia elementów

Tabela przedstawia jakie materiały oraz w jakiej ilości są wykorzystywane w produkowanych elementach. Jak widać, plastik stanowi znaczącą część wszystkich wykorzystywanych elementów, co widać wyraźnie na wykresie porównujących plastik do pozostałych materiałów.

5.6 Wzrost liczby setów od początku do roku 2022

Wykres przedstawia ile zostało zaprojektowanych setów w każdym roku. Dodatkowo zaprezentowane jest całkowita liczba zaprojektowanych setów dla każdego roku.

5.7 Top 15 tematów na podstawie ilości setów

5.8 Top 10 tematów przewodnich

Warto zwrócić uwagę, że jeśli temat przewodni nie miał nadrzędnego tematu, to traktowany był on jako własny nadrzędny temat

5.9 Suma setów oraz części dla każdego tematu

5.10 Top 20 najczęśniej występowanych kategorii części

5.11 Porównanie najczęstszych relacji między częściami

## # A tibble: 6 × 2
##   rel_type Count
##   <chr>    <int>
## 1 P        23879
## 2 R         2182
## 3 B         1292
## 4 M         1101
## 5 A         1023
## 6 T          500

5.12 Korelacja

5.13 Animacja porównujące podstawowe statystyki dla setów w przeciągu lat

5.14 Korelacja między podstawowymi statystykami związanymi z setami

6 Podumowanie najważniejszych trendów w rozwoju Lego

7 Przewidywanie dalszych cech zestawów Lego